<script>
// 定义promise对象
// 1-为啥默认是进行中状态  因为底层立马调用
// 2-resolve, reject哪来的   底层定义的两个函数 
// 3-数据是如何保存、为什么互斥

// 使用promise对象
// 1-为啥当初要存状态和数据   后期使用
// 2-为啥resolve数据交给了res、reject数据交个了err  底层根据状态判断
class Promise{
    promiseState = 'ing'
    promiseResult = null

    constructor(callback){
        let resolve = (data) => {
            if (this.promiseState !=='ing') return
            this.promiseState = 'success'
            this.promiseResult = data
        }
        let reject = (data) => {
            if (this.promiseState !=='ing') return
            this.promiseState = 'error'
            this.promiseResult = data
        }

        callback(resolve, reject)
    }
}   
Promise.prototype.then = function(fn1, fn2) {
    // this全等于实例化对象
    // 然后实例化对象身上有状态和数据
    if (this.promiseState === 'success'){
        fn1(this.promiseResult)
    }
    if (this.promiseState === 'error'){
        fn2(this.promiseResult)
    }
}
//原型方法
// 全局错误统一处理
Promise.prototype.catch = function() {}
// 不管成功了还是失败了都会走下一个
Promise.prototype.finally = function() {}
// 静态方法
// 成功
Promise.resolve = function() {}
// 失败
Promise.reject = function() {}
// 有一个失败都失败
Promise.all = function() {}
// 处理跑的最快的那个
Promise.race = function() {}
// 解决all一个失败就不行的问题
Promise.allSettled = function() {}
// 全失败才失败
Promise.any = function() {}

const p = new Promise((resolve, reject) => {
    console.log('我执行了')
    resolve(11)
    reject(22)
})
console.log(p)


p.then(
    res => {
        console.log('res', res);
    },
    err => {
        console.log('err', err);
    }
)
</script>